package ar.pegasus.clasificador.web.error;

import java.io.PrintWriter;
import java.io.Serializable;
import java.io.StringWriter;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;

import ar.pegasus.framework.componentes.PException;

@Name("gestorErrores")
@Scope(ScopeType.SESSION)
public class GestorErroresBean implements Serializable{

	private static final long serialVersionUID = 6628764177656333064L;
	private String mensaje;
	private String fromURL; 
	private Exception exception;
	private Boolean verDetalle;

	public void gestionarError(Exception e, String mensaje, String fromURL) throws ErrorInesperadoException  {
		//TODO: Completar las cosas que se mostrarian en la pantalla
		this.mensaje = mensaje;
		this.fromURL = fromURL;
		this.exception = e;
		this.verDetalle = false;
		if (e.getCause() != null)
			e.getCause().printStackTrace();
		throw new ErrorInesperadoException();
	}

	
	public void gestionarError(PException e, String mensaje, String fromURL) throws ErrorInesperadoException  {
		//TODO: Completar las cosas que se mostrarian en la pantalla
		this.mensaje = mensaje;
		this.fromURL = fromURL;
		this.exception = e;
		this.verDetalle = false;
		System.out.println(e.getMensajeError());
		if (e.getCause() != null)
			e.getCause().printStackTrace();
		throw new ErrorInesperadoException();
	}
	
	public String getMensaje() {
		return this.mensaje;
	}
	
	public void setMensaje(String mensaje) {
		this.mensaje = mensaje;
	}
	
	public void mostrarDetalle() {
		this.verDetalle = true;
	}
	
	public void ocultarDetalle() {
		this.verDetalle = false;
	}
	
	public String getFromURL() {
		return fromURL;
	}

	public void setFromURL(String fromURL) {
		this.fromURL = fromURL;
	}

	
	public String getExceptionMessage() {
		return exception.getMessage();
	}
	
	public String getStackTrace() {
		StringWriter sw = new StringWriter();
		if (exception.getCause()!=null) {
			exception.getCause().printStackTrace(new PrintWriter(sw));
		} else {
			exception.printStackTrace(new PrintWriter(sw));
		}
		return sw.toString();
	}
	
	public Boolean getVerDetalle() {
		return verDetalle;
	}

	public void setVerDetalle(Boolean verDetalle) {
		this.verDetalle = verDetalle;
	}
	
}
